﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using EFFC.Net.Data.Base;

namespace EFFC.Net.Parameters
{
    [Serializable]
    public class TxtColSpec : ParametersStd
    {

        public TxtColSpec()
        {
            AddPElement("ColumnName");
            AddPElement("DataTypeString");
            AddPElement("ByteLength", typeof(IntStd));
            AddPElement("Length", typeof(int));
            AddPElement("SubLength", typeof(IntStd));
            AddPElement("IsAllowNull", typeof(bool?));
            AddPElement("IsPK", typeof(bool?));
            AddPElement("StartIndex", typeof(IntStd));
            AddPElement("EndIndex", typeof(IntStd));
            AddPElement("ConvertProcessName");
        }
        /// <summary>
        /// 欄位名稱，必填
        /// </summary>
        public string ColumnName
        {
            get
            {
                return GetValue<string>("ColumnName");
            }
            set
            {
                _p["ColumnName"].Value = value;
            }
        }
        /// <summary>
        ///  欄位數據類型，如System.String,System.Int，必填
        /// </summary>
        public string DataTypeString
        {
            get
            {
                return GetValue<string>("DataTypeString");
            }
            set
            {
                _p["DataTypeString"].Value = value;
            }
        }
        /// <summary>
        /// 欄位長度（按字節方式計算）
        /// </summary>
        public IntStd ByteLength
        {
            get
            {
                return GetValue<IntStd>("ByteLength");
            }
            set
            {
                _p["ByteLength"].Value = value;
            }
        }
        /// <summary>
        /// 欄位長度（按字串方式計算）
        /// </summary>
        public IntStd Length
        {
            get
            {
                return GetValue<IntStd>("Length");
            }
            set
            {
                _p["Length"].Value = value;
            }
        }
        /// <summary>
        /// 欄位輔助長度
        /// </summary>
        public IntStd SubLength
        {
            get
            {
                return GetValue<IntStd>("SubLength");
            }
            set
            {
                _p["SubLength"].Value = value;
            }
        }
        /// <summary>
        /// 是否允許為Null
        /// </summary>
        public bool? IsAllowNull
        {
            get
            {
                return GetValue<bool?>("IsAllowNull");
            }
            set
            {
                _p["IsAllowNull"].Value = value;
            }
        }
        /// <summary>
        /// 是否為PK
        /// </summary>
        public bool? IsPK
        {
            get
            {
                return GetValue<bool?>("IsPK");
            }
            set
            {
                _p["IsPK"].Value = value;
                if (value != null && value.Value)
                {
                    IsAllowNull = false;
                }
            }
        }
        /// <summary>
        /// 起始位置（FixLength模式）,從1開始，如果本欄位不需要處理則寫NULL
        /// </summary>
        public IntStd StartIndex
        {
            get
            {
                return GetValue<IntStd>("StartIndex");
            }
            set
            {
                _p["StartIndex"].Value = value;
            }
        }
        /// <summary>
        /// 結束位置（FixLength模式），如果本欄位不需要處理則寫NULL
        /// </summary>
        public IntStd EndIndex
        {
            get
            {
                return GetValue<IntStd>("EndIndex");
            }
            set
            {
                _p["EndIndex"].Value = value;
            }
        }
        /// <summary>
        /// IConvert實現類的名稱（含NameSpace），用於提供給本欄位進行特殊轉換的能力
        /// </summary>
        public string ConvertProcessName
        {
            get
            {
                return GetValue<string>("ConvertProcessName");
            }
            set
            {
                _p["ConvertProcessName"].Value = value;
            }
        }

    }
}
